/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sgsmcan.Entidad;

import com.sgsmcan.Exporter.Exporter;
import java.io.Serializable;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author user
 */
@Entity
@Table(name = "PERRO")
public class Perro extends Exporter implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "ID")
    Integer id;

    @Column(name = "NOMBRE")
    String nombre;

    @Column(name = "fechaNacimiento")
    Date fechaNacimiento;

    @Column(name = "ESTADO", insertable = false)
    Boolean estado;

    @Column(name = "PEDIGREE")
    boolean pedigree; 

    @Column(name = "FOTO")
    String foto;

    @Column(name = "SEXO")
    Integer sexo;

    @Column(name = "FECHAREGISTRO", insertable = false)
    Timestamp fechaRegistro;

    @Column(name = "FECHAACTUALIZACION", insertable = false, updatable = false)
    Timestamp fechaActualizacion;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "IDRAZA", nullable = false)
    Raza raza;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "IDAMO", nullable = true)
    Amo amo;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "IDCOLOR", nullable = false)
    Color color;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "perro")
    Set<HistorialClinico> historiales = new HashSet<HistorialClinico>(0);
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "spk.perro")
    private Set<SerenoPerro> serenoperros = new HashSet<SerenoPerro>(0);

    public Perro() {
    }

    public Perro(Integer id, String nombre, Date fechaNacimiento, Boolean estado, boolean pedigree, String foto, Timestamp fechaRegistro, Timestamp fechaActualizacion, Raza raza, Amo amo) {
        this.id = id;
        this.nombre = nombre;
        this.fechaNacimiento = fechaNacimiento;
        this.estado = estado;
        this.pedigree = pedigree;
        this.foto = foto;
        this.fechaRegistro = fechaRegistro;
        this.fechaActualizacion = fechaActualizacion;
        this.raza = raza;
        this.amo = amo;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Perro{");
        builder.append("id");
        builder.append(id);
        builder.append(", nombre=");
        builder.append(nombre);
        builder.append(", color=");
        builder.append(color);
        builder.append("}");
        return builder.toString();
    }

    /*  GETTER AND SETTER   */
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Boolean isEstado() {
        return estado;
    }

    public void setEstado(Boolean estado) {
        this.estado = estado;
    }

    public boolean isPedigree() {
        return pedigree;
    }

    public void setPedigree(boolean pedigree) {
        this.pedigree = pedigree;
    }

    public Timestamp getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Timestamp fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public Timestamp getFechaActualizacion() {
        return fechaActualizacion;
    }

    public void setFechaActualizacion(Timestamp fechaActualizacion) {
        this.fechaActualizacion = fechaActualizacion;
    }

    public Raza getRaza() {
        return raza;
    }

    public void setRaza(Raza raza) {
        this.raza = raza;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public Amo getAmo() {
        return amo;
    }

    public void setAmo(Amo amo) {
        this.amo = amo;
    }

    public Set<HistorialClinico> getHistoriales() {
        return historiales;
    }

    public void setHistoriales(Set<HistorialClinico> historiales) {
        this.historiales = historiales;
    }

    public Integer getSexo() {
        return sexo;
    }

    public void setSexo(Integer sexo) {
        this.sexo = sexo;
    }

    public Set<SerenoPerro> getSerenoperros() {
        return serenoperros;
    }

    public void setSerenoperros(Set<SerenoPerro> serenoperros) {
        this.serenoperros = serenoperros;
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    @Override
    public String[] getDatos() {
        String[] datos = new String[7];
        datos[0]=""+this.id;
        datos[1]=""+this.nombre;
        datos[2]=""+this.raza.descripcion;
        datos[3]=""+this.color.nombreColor;
        datos[4]=""+(this.pedigree == true ?"Si":"No");
        datos[5]=""+(this.amo == null? "Criadero de la Municipalidad":(this.amo.nombre+" "+this.amo.apellido));
        datos[6]=""+(this.amo == null? "":(this.amo.dni));
        return datos;
    }

    @Override
    public String[] getTitulos() {
        return new String[]{"id","Nombre","Raza","Color","Pedigree","Dueño","DNI"};
    }
    
    

}
